﻿using System;
using System.Data;
using System.Windows.Forms;
using Gestión_UTN.util;

namespace Gestión_UTN.View.alta
{
    public partial class AltaInscripcion : Form
    {
        private static Gestión_UTN.bl.carrerabl createCarrera = Gestión_UTN.factories.blfactory.createCarrera();
        private static Gestión_UTN.bl.alumnobl createAlumno = Gestión_UTN.factories.blfactory.createAlumno();
        private static Gestión_UTN.bl.inscripcionbl createInscripcion = Gestión_UTN.factories.blfactory.createInscripcion();
        private static int d = 0;
        private static string f = "";
        private static string c = "";
        private static bool t = false;
        private static bool p = false;
        private static bool fot = false;
        private static bool cd = false;

        public AltaInscripcion()
        {
            InitializeComponent();
        }

        private void AltaInscripcion_Load(object sender, EventArgs e)
        {
            DataTable carreras = createCarrera.FindAllCarreras();

            if (null != carreras)
            {
                foreach (DataRow dr in carreras.Rows)
                {
                    this.cmbCarrera.Items.Add(dr["car_nombre"]);
                }
            }

            DataTable inscripciones = createInscripcion.FindAllInscripciones();

            if (null != inscripciones)
            {
                foreach (DataRow dr in inscripciones.Rows)
                {
                    this.dgvInscripciones.Rows.Add(dr["alu_dni"], dr["ins_fecha"], dr["car_nombre"], dr["ins_titulo"],
                        dr["ins_fotos"], dr["ins_planilla"], dr["ins_copiaDocumento"]);
                }
            }

            this.txtFecha.Text = DateTime.Now.ToShortDateString();
        }

        private void btnNuevoAlumno_Click(object sender, EventArgs e)
        {
            alta.AltaAlumno alta = new AltaAlumno();

            if (alta.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.txtDNI.Text = alta.DNI.ToString();
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            LimpiarForm();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    bo.Alumnobo alu = new bo.Alumnobo();

                    alu.Dni = Convert.ToInt32(this.txtDNI.Text);

                    bo.Carrerabo car = createCarrera.FindCarreraByNombre(this.cmbCarrera.Text);

                    bo.Inscripcionbo ins = new bo.Inscripcionbo();

                    ins.Alumno = alu;
                    ins.Carrera = car;
                    ins.CopiaDoc = this.chkCopiaDoc.Checked;
                    ins.Fotos = this.chkFotos.Checked;
                    ins.Planilla = this.chkPlanilla.Checked;
                    ins.Titulo = this.chkTitulo.Checked;
                    ins.Fecha = Convert.ToDateTime(this.txtFecha.Text);

                    bool ingresada = createInscripcion.SaveInscripcion(ins);

                    if (ingresada)
                    {
                        MessageBox.Show("Inscripción Registrada!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        RefreshDgv();

                        LimpiarForm();
                    }
                    else
                    {
                        MessageBox.Show("Error al Registrar!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            catch (exceptions.blexception)
            {
                MessageBox.Show("Error al Intentar Guardar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al Intentar Guardar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Gestión_UTN.util.EscribirLog.escribirArchivo(ex.Message);
            }
        }

        private void LimpiarForm()
        {
            this.txtDNI.Clear();
            this.cmbCarrera.Text = "";
            this.txtFecha.Text = DateTime.Now.ToShortDateString();
            this.chkCopiaDoc.Checked = false;
            this.chkFotos.Checked = false;
            this.chkPlanilla.Checked = false;
            this.chkTitulo.Checked = false;
        }

        private bool Validar()
        {
            bool checkDNI = false;
            bool checkFecha = false;
            bool checkCarrera = false;

            if (!Validador.es_fecha(txtFecha))
            {
                errProv.SetError(txtFecha, "Formato: ##/##/####");
            }
            else
            {
                errProv.SetError(txtFecha, String.Empty);
                checkFecha = true;
            }

            if (!Validador.es_nombre(cmbCarrera))
            {
                errProv.SetError(cmbCarrera, "Sólo Letras");
            }
            else
            {
                errProv.SetError(cmbCarrera, String.Empty);
                checkCarrera = true;
            }

            if (!Validador.es_numero(txtDNI))
            {
                errProv.SetError(txtDNI, "Sólo Números");
            }
            else
            {
                errProv.SetError(txtDNI, String.Empty);
                checkDNI = true;
            }

            return (checkDNI && checkCarrera && checkFecha);
        }

        private void dgvInscripciones_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (this.dgvInscripciones.CurrentCell != null)
            {
                d = Convert.ToInt32(this.dgvInscripciones.CurrentRow.Cells[0].Value.ToString());

                f = this.dgvInscripciones.CurrentRow.Cells[1].Value.ToString();

                c = this.dgvInscripciones.CurrentRow.Cells[2].Value.ToString();

                t = Convert.ToBoolean(this.dgvInscripciones.CurrentRow.Cells[3].Value.ToString());

                p = Convert.ToBoolean(this.dgvInscripciones.CurrentRow.Cells[5].Value.ToString());

                fot = Convert.ToBoolean(this.dgvInscripciones.CurrentRow.Cells[4].Value.ToString());

                cd = Convert.ToBoolean(this.dgvInscripciones.CurrentRow.Cells[6].Value.ToString());

                this.txtDNI.Text = d.ToString();

                this.txtFecha.Text = f;

                this.cmbCarrera.Text = c;

                this.chkCopiaDoc.Checked = cd;

                this.chkFotos.Checked = fot;

                this.chkPlanilla.Checked = p;

                this.chkTitulo.Checked = t;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Validar())
                {
                    bo.Alumnobo alu = new bo.Alumnobo();

                    alu.Dni = Convert.ToInt32(this.txtDNI.Text);

                    bo.Carrerabo car = createCarrera.FindCarreraByNombre(this.cmbCarrera.Text);

                    bo.Inscripcionbo ins = new bo.Inscripcionbo();

                    ins.Alumno = alu;
                    ins.Carrera = car;
                    ins.CopiaDoc = this.chkCopiaDoc.Checked;
                    ins.Fotos = this.chkFotos.Checked;
                    ins.Planilla = this.chkPlanilla.Checked;
                    ins.Titulo = this.chkTitulo.Checked;
                    ins.Fecha = Convert.ToDateTime(this.txtFecha.Text);

                    bool modificada = createInscripcion.ModifyInscripcion(Convert.ToDateTime(f), d, ins);

                    if (modificada)
                    {
                        MessageBox.Show("Inscripción Modificada!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        RefreshDgv();

                        LimpiarForm();
                    }
                    else
                    {
                        MessageBox.Show("Error al Registrar!!", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
            }
            catch (exceptions.blexception)
            {
                MessageBox.Show("Error al Intentar Modificar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error al Intentar Modificar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                Gestión_UTN.util.EscribirLog.escribirArchivo(ex.Message);
            }
        }

        private void RefreshDgv()
        {
            DataTable inscripciones = createInscripcion.FindAllInscripciones();

            if (null != inscripciones)
            {
                this.dgvInscripciones.Rows.Clear();

                foreach (DataRow dr in inscripciones.Rows)
                {
                    this.dgvInscripciones.Rows.Add(dr["alu_dni"], dr["ins_fecha"], dr["car_nombre"], dr["ins_titulo"],
                        dr["ins_fotos"], dr["ins_planilla"], dr["ins_copiaDocumento"]);
                }
            }
        }
    }
}
